package com.itheima;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class Demo {
    public static void main(String[] args) {

        //目标对象(要增强的对象)
        Car car = new WLCar();

        /*
            参数1: ClassLoaber loader 代理出来的对象在内存中,也是需要加载进JVM虚拟机
            参数2: Class<?>[] interfaces 目标类实现接口的数组
            参数3: InvocationHandler h 代理业务逻辑对象
        */
        Car proxy_car = (Car) Proxy.newProxyInstance(car.getClass().getClassLoader(), car.getClass().getInterfaces(), new InvocationHandler() {
            /*
                参数1: object proxy 代理对象(千万别用)
                参数2: Method method  调用代理对象任意方法, 方法则会封装成Method, 传递给该参数
                参数3: Object[] args 调用代理对象任意方法, 方法参数则传递给args
            */
            @Override
            public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
                if("run".equals(method.getName())){
                    //需要增强的方法
                    System.out.println("五菱汽车弹射起步, biubiubiu~~~");
                }else {
                    return method.invoke(car,objects);
                }
                return null;
            }
        });

        proxy_car.run(10000);
    }
}
